import functools

# 加了星号（*）的变量args会存放所有未命名的变量参数，args为元组；而加**的变量kwargs会存放命名参数，即形如key=value的参数， kwargs为字典。
def showarg(*args, **kw):
    print(args)
    print(kw)


p1 = functools.partial(showarg, 1, 2, 3) # 1 2 3 成为默认参数了
p1() # (1, 2, 3)  \n  {}
p1(4, 5, 6) # (1, 2, 3, 4, 5, 6) \n  {}
p1(a='python', b='itcast')  # (1, 2, 3) \n {'a': 'python', 'b': 'itcast'}

p2 = functools.partial(showarg, a=3, b='linux') # a=3, b='linux' 成为默认参数
p2() # () \n {'a': 3, 'b': 'linux'}
p2(1, 2) # (1, 2) \n {'a': 3, 'b': 'linux'}
p2(a='python', b='itcast') # () \n {'a': 'python', 'b': 'itcast'}
